/**
 * 文件名:  socket_utils.h
 * 作者:    wangtianliang
 * 日期:    2022-12-20
 * 功能:
 * 代理服务器公共函数
 */
#ifndef _PROXY_H_
#define _PROXY_H_

#include <signal.h>
#include <stdint.h>
#include "socket_utils.h"

#define FILENAME_PROXY_PORT "./dbproxy_port"

/* 插件私有数据销毁回调函数 */
typedef void (*private_destroy_cb) (void *private_data);

/* 会话公共结构结构体 属性赋值和获取不提供接口，公共属性so赋值，其余特有属性代理自己赋值*/
typedef struct dbsession_common_st
{
    //会话基本信息, 命名和使用参考现有代理，涉及字段全部预留
    void *redis_conn;
    void *mysql_conn;
    private_destroy_cb pd_func;               /**< 插件私有数据卸载回调 */
    void *private;                            /**< 插件私有数据 */
} dbsession_st;

//--protocol type
enum DBTYPE
{
	TYPE_MYSQL,
	TYPE_MSSQL,
	TYPE_DB2,
	TYPE_INFORMIX,
	TYPE_SYBASE,
	TYPE_ORACLE,
	TYPE_POSTGRE,
	TYPE_TERADATA,
	TYPE_DM,
	TYPE_DM_UT8,
	TYPE_KINGBASE,
	TYPE_DB2_v10,
	TYPE_MSSQL_v2008,
	TYPE_GBASE_8S,
	TYPE_GBASE_8A,
};

//代理子进程处理函数, 第一个int代表ip类型(AF_INET/AF_INET6)，第二个int是socketfd
typedef int (*proxy_handle_func)(int, int);

/**
 *  代理main函数流程
 * \param [in]  argc  main函数的argc参数
 * \param [in]  argv  main函数argv参数
 * \param [in]  dbtype 资源类型
 * \param [in]  pfunc 代理处理函数
 * \return  int 0：成功；其他：失败
 */
int proxy_main_handler(int argc, char **argv, enum DBTYPE dbtype, proxy_handle_func pfunc);

#endif
